package test.spring;

import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author tom
 * @version 1.0
 * @since jkd1.5
 * @see springframe
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-context-for-test.xml" })
public class AbstractTestInSpring extends
		AbstractTransactionalJUnit4SpringContextTests {

	/*
	 * 测试Spring Hibernate 项目的时候，可以继承这个类，提供事务支持，和获取bean的两种方法：
	 * 
	 * 1.通过 getContext().getBean(); 2.直接在要获取的bean 加 annotation @Resource
	 * （同一个类只在xml bean出现一次可以这样）。
	 * 
	 * 通过继承pt（str） 方法，可以在打印的时候，减少敲写代码。
	 * 
	 * 在setup和 teardown 可以做一些初始化操作，如初始化操作等。
	 */

	@Autowired
	private ApplicationContext context;

	/**
	 * @param null
	 * @return ApplicationContext
	 */
	public ApplicationContext getContext() {
		return context;
	}

	@Before
	public void setUp() {
		Assert.assertNotNull(context);
	}

	@After
	public void tearDown() {

	}

	public void deleteData() {
		executeSql("delete.sql");
	}

	public void insertData() {
		executeSql("insert.sql");
	}

	public void executeSql(String path) {
		executeSqlScript(path, false);
	}

	public void pt(String str) throws DataAccessException {
		System.out.println("\n************* " + str + " *************");
	}
}
